//
//  main.m
//  OC03_属性_点语法
//
//  Created by 侯平章 on 16/2/21.
//  Copyright © 2016年 侯平章. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"
int main(int argc, const char * argv[]) {
    
#pragma mark - 知识点1. 属性
    /** 
     *属实现了三个功能: 1.声明了一个实例变量
                                2.声明了setter,getter方法.
                                3.实现了setter,getter方法
     *
     *详见Person类文件
     */
    
    //创建对象
    Person *per = [Person Person];
    
    //实例变量赋值
    [per setName:@"Tom"];
    [per setSex:@"man"];
    [per setAge:20];
    
    //实例变量取值
    NSLog(@"name:%@,sex:%@,age:%ld",[per name],[per sex],[per age]);
    
#pragma mark - 知识点2. 属性的特性
    
    /**
     *属性的特性有3个,读写性,原子性,语义设置.
     *属性的特性的目的:控制setter,getter方法实现的细节
     *
     *读写性特性的选项: readonly,readwrite,setter=,getter=.默认是readwrite.常用是readwrite
     *原子性特性的选项: atomic,nonatomic. 默认是atomic.                                                                                        常用是nonatomic.
     *语义设置特性的选项: assign,retain,copy 默认是assign.
                                                            非对象类型(int, NSIntger)使用assign.
                                                            对象类型(NSString)使用retain. 
                                                            对象类型并且想获取副本,使用copy.
     *详见Person.h文件
     */
    
    
#pragma mark - 知识点3. 点语法
    /**
     *点语法只适用于setter,getter方法.
     *
     *
     */
    
    //创建对象
    Person *per1 = [Person Person];
    //点语法对属性进行赋值
    per1.name = @"Tom";
    per1.sex = @"man";
    per1.age = 18;
    NSLog(@"name:%@,sex:%@,age:%ld",per1.name,per1.sex,per1.age);
    Person *per2 = [Person Person];
    per2.name = per1.name;
    
#pragma mark - 综合练习(分数)
    /**
     * 创建一个Fraction类(分数)实现分数的加减乘除, ⽐较⼤小、约分等方法。
     * 提示：
     * 1.声明属性 numerator(分子)、denominator(分母)。
     * 2.声明自定义初始化方法、遍历构造器，用于给分子分母赋值。
     * 3.声明功能方法(6个功能).
     */
    
    /** 创建Fraction对象*/
    Fraction *frac1 = [Fraction fractionWithNumerator:2 denominator:4];
    Fraction *frac2 = [Fraction fractionWithNumerator:1 denominator:2];
    
    /** 调用加号方法*/
    Fraction *frac3 = [frac1 plusWithFraction:frac2];
    NSLog(@"sum = %@",frac3);
    NSLog(@"sum = %ld,%ld",frac3.numerator,frac3.denominator);
    
    //调用减法
//    Fraction *frac4 = [frac1 subWithFraction:frac2];
//    NSLog(@"poor = %ld/%ld",frac4.numerator,frac4.denominator);
    
    //调用乘法
    Fraction *frac5 = [frac1 multWithFraction:frac2];
    NSLog(@"%ld/%ld",frac5.numerator,frac5.denominator);
    //调用除法
    Fraction *frac6 = [frac1 divWithFraction:frac2];
    NSLog(@"%ld/%ld",frac6.numerator,frac6.denominator);
    //比较大小
    Fraction *frac7 = [frac1 comWithFraction:frac2];
    NSLog(@"%ld/%ld",frac7.numerator,frac7.denominator);
    //约分
    Fraction *frac8 = [frac1 reductionWithFraction:frac1];
    NSLog(@"%ld/%ld",frac8.numerator,frac8.denominator);
    Fraction *frac9 = [frac2 reductionWithFraction:frac2];
    NSLog(@"%ld/%ld",frac9.numerator,frac9.denominator);

    return 0;
}
